from sqlalchemy.orm import Session  # 导入SQLAlchemy会话类
from . import models, schemas  # 导入本地模型和模式定义

# 这个文件用于与数据库中的数据进行交互 , crud 分别是 增加, 删除, 修改, 查询

def get_user(db: Session, user_id: int):
    """
    根据用户ID获取用户信息。

    :param db: SQLAlchemy会话对象
    :param user_id: 用户ID
    :return: 用户对象或None
    """
    return db.query(models.User).filter(models.User.id == user_id).first()

def get_user_by_email(db: Session, email: str):
    """
    根据电子邮件地址获取用户信息。

    :param db: SQLAlchemy会话对象
    :param email: 用户电子邮件地址
    :return: 用户对象或None
    """
    return db.query(models.User).filter(models.User.email == email).first()

def get_users(db: Session, skip: int = 0, limit: int = 100):
    """
    获取所有用户信息，并支持分页。

    :param db: SQLAlchemy会话对象
    :param skip: 跳过的记录数
    :param limit: 每页显示的记录数
    :return: 用户列表
    """
    return db.query(models.User).offset(skip).limit(limit).all()

def create_user(db: Session, user: schemas.UserCreate):
    """
    创建新用户。

    :param db: SQLAlchemy会话对象
    :param user: 新用户的创建信息
    :return: 创建的用户对象
    """
    fake_hashed_password = user.password + "notreallyhashed"  # 伪哈希密码
    db_user = models.User(email=user.email, hashed_password=fake_hashed_password)  # 创建用户对象
    db.add(db_user)  # 添加到会话
    db.commit()  # 提交事务
    db.refresh(db_user)  # 刷新对象以获取数据库中的最新状态
    return db_user

def get_items(db: Session, skip: int = 0, limit: int = 100):
    """
    获取所有项目信息，并支持分页。

    :param db: SQLAlchemy会话对象
    :param skip: 跳过的记录数
    :param limit: 每页显示的记录数
    :return: 项目列表
    """
    return db.query(models.Item).offset(skip).limit(limit).all()

def create_user_item(db: Session, item: schemas.ItemCreate, user_id: int):
    """
    创建新项目并关联到指定用户。

    :param db: SQLAlchemy会话对象
    :param item: 新项目的创建信息
    :param user_id: 用户ID
    :return: 创建的项目对象
    """
    db_item = models.Item(**item.dict(), owner_id=user_id)  # 创建项目对象
    db.add(db_item)  # 添加到会话
    db.commit()  # 提交事务
    db.refresh(db_item)  # 刷新对象以获取数据库中的最新状态
    return db_item
